package com.builder;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;

import com.model.ProductoCodigo;
import com.model.Proveedor;
import com.view.ProductoCodigoView;
import com.view.ProductoView;
import com.view.ProveedorView;

@ManagedBean
@ViewScoped
@SuppressWarnings("serial")
public class ProductoCodigoBuilder extends
		BaseBuilder<ProductoCodigoView, ProductoCodigo> {

	@ManagedProperty("#{productoBuilder}")
	private ProductoBuilder productoBuilder;

	@ManagedProperty("#{contactoBuilder}")
	private ContactoBuilder contactoBuilder;

	@ManagedProperty("#{direccionBuilder}")
	private DireccionBuilder direccionBuilder;

	@Override
	public ProductoCodigo toDomain(ProductoCodigoView view) {
		return new ProductoCodigo(
				view.getId(),
				view.getProducto() != null ? productoBuilder.toDomain(view
						.getProducto()) : null,
				view.getCodigoProveedor(),
				view.getProveedor() != null
						&& view.getProveedor().getId() != null ? new Proveedor(
						view.getProveedor().getId(), view.getProveedor()
								.getNombre(), view.getProveedor()
								.getNombreFantasia(), view.getProveedor()
								.getObservaciones(), contactoBuilder
								.toDomain(view.getProveedor()
										.getListaContactos()), direccionBuilder
								.toDomain(view.getProveedor().getDireccion()),
						view.getProveedor().getDni(), view.getProveedor()
								.getCuil(), view.getProveedor().getCuit(), null, view.getProveedor().getTipoProveedor())
						: null);
	}

	@Override
	public ProductoCodigoView toView(ProductoCodigo model) {

		ProveedorView proveedorView;
		try {
			model.getProveedor().getListaProductoCodigo();
			proveedorView = new ProveedorView(model.getProveedor().getID(),
					model.getProveedor().getNombre(), model.getProveedor()
							.getNombreFantasia(), model.getProveedor()
							.getObservaciones(), contactoBuilder.toView(model
							.getProveedor().getListaContactos()),
					direccionBuilder
							.toView(model.getProveedor().getDireccion()), model
							.getProveedor().getDni(), model.getProveedor()
							.getCuil(), model.getProveedor().getCuit(), null, model.getProveedor().getTipoProveedor());
		} catch (Throwable t) {
			proveedorView = new ProveedorView(model.getProveedor().getID(),
					model.getProveedor().getNombre(), model.getProveedor()
							.getNombreFantasia(), model.getProveedor()
							.getObservaciones(), contactoBuilder.toView(model
							.getProveedor().getListaContactos()),
					direccionBuilder
							.toView(model.getProveedor().getDireccion()), model
							.getProveedor().getDni(), model.getProveedor()
							.getCuil(), model.getProveedor().getCuit(), null, model.getProveedor().getTipoProveedor());

		}

		return new ProductoCodigoView(model.getID(),
				model.getProducto() != null ? productoBuilder.toView(model
						.getProducto()) : new ProductoView(),
				model.getCodigoProveedor(), proveedorView);
	}

	public ProductoBuilder getProductoBuilder() {
		return productoBuilder;
	}

	public void setProductoBuilder(ProductoBuilder productoBuilder) {
		this.productoBuilder = productoBuilder;
	}

	public ContactoBuilder getContactoBuilder() {
		return contactoBuilder;
	}

	public void setContactoBuilder(ContactoBuilder contactoBuilder) {
		this.contactoBuilder = contactoBuilder;
	}

	public DireccionBuilder getDireccionBuilder() {
		return direccionBuilder;
	}

	public void setDireccionBuilder(DireccionBuilder direccionBuilder) {
		this.direccionBuilder = direccionBuilder;
	}

}
